package chapter6;

import java.util.*;

/**
 * 数字组合
 * 排列问题就是把用回溯算法解决 一个索引 一个传入集合 一个辅助集合 递归结束的条件是辅助集合的长度等于传入集合的长度
 * @author yuh
 * @date 2018/4/25 19:41
 */
public class NumberCombinations {

    static List<Object[]> nums = new ArrayList<>();
    static Map<Integer, Boolean> map = new HashMap<>();

    static void pailie(int index, List<Integer> inputNums, List<Integer> se) {
        if (index == inputNums.size()) {
            nums.add(se.toArray());
            return;
        }
        for (int i = 0; i < inputNums.size(); i++) {
            Integer num = inputNums.get(i);
            if (!map.get(num)) {
                se.add(num);
                map.put(num, true);
                pailie(index + 1, inputNums, se);
                se.remove(num);
                map.put(num, false);
            }
        }
    }

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);

        for (Integer integer : list) {
            map.put(integer, false);
        }
        pailie(0, list, new ArrayList<>());
        for (Object[] objects : nums) {
            System.out.println(Arrays.toString(objects));
        }
    }


}
